英文:
Bash Getting each line of file to awk and have each column as a separate variable to run a command
问题
抱歉,你的请求有点复杂,但我会尽力提供有关代码的翻译和问题的解答。以下是代码的翻译:
#!/bin/bash
echo "您已打开了Roulette Dealer Finder程序!"
echo "您是否有日期和时间的列表?如果是这样,请使用文件作为参数运行此脚本"
echo "确保其格式为MMDD TIME"
# 如果没有提供文件作为参数,询问用户日期、小时和AM/PM
if [ -z "$1" ]
then
echo "输入日期为MMDD:"
read date
echo "输入小时为##:"
read hour
echo "这是AM还是PM?"
echo "1) AM"
echo "2) PM"
read meridiem
if [ "${meridiem}" = 1 ]; then
echo "以下是${hour} AM的Roulette荷官:"
awk -F" " '{print $1,$2,$5,$6}' ${date}_Dealer_schedule.txt | grep -i "${hour}:00:00 AM"
elif [ "${meridiem}" = 2 ]; then
echo "以下是${hour} PM的Roulette荷官:"
awk -F" " '{print $1,$2,$5,$6}' ${date}_Dealer_schedule.txt | grep -i "${hour}:00:00 PM"
else
echo "您没有从可用选项中选择..."
echo "您选择的是:${meridiem}"
echo "请下次选择'1'或'2'。"
fi
# 现在我们要对文件中的每一行执行操作
else
# 慢慢地失去理智,直到它起作用或大脑爆炸
fi
请注意,我只提供了代码的翻译,不包括问题的解答。如果您需要关于代码的特定问题的帮助,请提出具体问题,我会尽力提供解答。
英文:
Im trying to get this to take each line of a file that is formatted like 0310 05:00:00 AM
and use the 0310 to open ####_Dealer_schedule.txt and then grep the time followed by adding each result to an output file. I've attempted to redo it repeatedly but end up scrapping the result as its just not working.
Code:
#!/bin/bash
echo "You have opened the Roulette Dealer Finder Program!"
echo "Do you have a list of dates and time? If so, run this script with the file as the arg"
echo "Make sure it is formatted as MMDD TIME"
#if the didnt give a file just ask them all the things
if [ -z "$1" ]
then
echo "Enter Date as MMDD:"
read date
echo "Enter the Hour as ##:"
read hour
echo "Is this AM or PM?"
echo "1) AM"
echo "2) PM"
read meridiem
if [ "${meridiem}" = 1 ]; then
echo "Here is the Roulette Dealer for" ${hour} "AM:"
awk -F" " '{print $1,$2,$5,$6}' $date\_Dealer_schedule.txt | grep -i "${hour}:00:00 AM"
elif [ "${meridiem}" = 2 ]; then
echo "Here is the Roulette Dealer for" ${hour} "PM:"
awk -F" " '{print $1,$2,$5,$6}' $date\_Dealer_schedule.txt | grep -i "${hour}:00:00 PM"
else
echo "You didnt pick from the available options..."
echo "you selected: "${meridiem}
echo "Please select either '1' or '2' next time."
fi
# Now we want to do the thing for each of the lines in the file
else
#slowly lose mind until it works or brain explodes
fi
List File:
0310 05:00:00 AM
0310 08:00:00 AM
0310 02:00:00 PM
0310 08:00:00 PM
0310 11:00:00 PM
0312 05:00:00 AM
0312 08:00:00 AM
0312 02:00:00 PM
0312 08:00:00 PM
0312 11:00:00 PM
0315 05:00:00 AM
0315 08:00:00 AM
0315 02:00:00 PM
Here is a list of what I have tried:
Testvar:
testvar=$(awk '{print $1}' $1 | uniq)
head ${testvar}\_Dealer_schedule.txt
This output:
head: cannot open '0310' for reading: No such file or directory
head: cannot open '0312' for reading: No such file or directory
==> 0315_Dealer_schedule.txt <==
Hour AM/PM BlackJack_Dealer_FNAME LAST Roulette_Dealer_FNAME LAST Texas_Hold_EM_dealer_FNAME LAST
12:00:00 AM Izabela Parrish Marlene Mcpherson Madina Britton
01:00:00 AM Billy Jones Saima Mcdermott Summer-Louise Hammond
02:00:00 AM Summer-Louise Hammond Abigale Rich John-James Hayward
03:00:00 AM John-James Hayward Evalyn Howell Chyna Mercado
04:00:00 AM Chyna Mercado Cleveland Hanna Katey Bean
05:00:00 AM Katey Bean Billy Jones Evalyn Howell
06:00:00 AM Evalyn Howell Saima Mcdermott Cleveland Hanna
07:00:00 AM Cleveland Hanna Abigale Rich Billy Jones
Xargs:
xargs < $1 -n 2 | awk -F" " '{print $1,$2}' > tempt.txt
wc tempt.txt
awk -F" " '{print $1}' temp.txt
#awk -F" " '{print $2}' temp.txt
this output:
20 39 222 tempt.txt
awk: fatal: cannot open file `temp.txt' for reading (No such file or directory)
Array:
i=0
while read line
do
array[$((++i))]=$line
echo ${array[$i]}
done < $1
This output:
find_the_dealer.sh: 37: array[0]=0310: not found
find_the_dealer.sh: 38: Bad substitution
答案1
得分: 2
你会用 `awk` 做什么?当然 `awk` 可以打开和处理额外的文件(而不仅仅是标准输入),但在纯Bash中做这件事更容易一些。这是一个丑陋而低效的黑客,用来展示基本原理:
```bash
while read -r prefix time meridiem discard; do
grep -- "^${time} ${meridiem}" \
"/path/to/${prefix}_Dealer_schedule.txt"
done < /path/to/list > /path/to/output
现在让我们稍微变得更加合理和高效(减少 grep
调用次数,减少文件遍历):
declare -A prefix_times=()
while read -r prefix time meridiem discard; do
prefix_times["$prefix"]+="|${time} ${meridiem}"
done < /path/to/list
for prefix in "${!prefix_times[@]}"; do
grep -E -- "^(${prefix_times["$prefix"]:1})" \
"/path/to/${prefix}_Dealer_schedule.txt"
done > /path/to/output
英文:
What would you use awk
for? Of course awk
can open and handle additional files (other than its standard input), but this is somewhat easier to do in pure Bash. Here’s an ugly, inefficient hack, to show the basic principle:
while read -r prefix time meridiem discard; do
grep -- "^${time} ${meridiem}" \
"/path/to/${prefix}_Dealer_schedule.txt"
done < /path/to/list > /path/to/output
Now let’s make this↑ slightly more reasonable and efficient (fewer grep
invocations, fewer file traversals):
declare -A prefix_times=()
while read -r prefix time meridiem discard; do
prefix_times["$prefix"]+="|${time} ${meridiem}"
done < /path/to/list
for prefix in "${!prefix_times[@]}"; do
grep -E -- "^(${prefix_times["$prefix"]:1})" \
"/path/to/${prefix}_Dealer_schedule.txt"
done > /path/to/output
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论