Linux 如何使用schell脚本从文件中读取元素,进行一些计算和写回?
我刚刚接触脚本语言 现在我有一个文件,里面有:Linux 如何使用schell脚本从文件中读取元素,进行一些计算和写回?,linux,file,shell,awk,Linux,File,Shell,Awk,我刚刚接触脚本语言 现在我有一个文件,里面有: > A1 B1 C1 > A2 B2 C2 > A3 B3 C3 我只想使用shell脚本(bash)逐个元素读取文件。然后我想对元素A1、A2和A3进行一些计算,然后将它们写回一个新文件(或旧文件)。因此,新文件将是(假设计算结果为D1、D2和D3): 计算是通过命令“date-D@(A的值)”将Unix历元时间(A的值)转换为人类可读的时间(D的值) 我尝试使用awk命令: awk '{$1=`date -d @
> A1 B1 C1
> A2 B2 C2
> A3 B3 C3
我只想使用shell脚本(bash)逐个元素读取文件。然后我想对元素A1、A2和A3进行一些计算,然后将它们写回一个新文件(或旧文件)。因此,新文件将是(假设计算结果为D1、D2和D3):
计算是通过命令“date-D@(A的值)”将Unix历元时间(A的值)转换为人类可读的时间(D的值)
我尝试使用awk命令:
awk '{$1=`date -d @$1`}' test.txt
但它似乎有一些语法错误:>错误是:
awk: {$1=`date -d @$3`}
awk: ^ invalid char '`' in expression
你的要求太不清楚了!你是什么意思 我可以给你举个例子,希望对你有所帮助:
kent$ cat test.txt
100 B1 C1
200 B2 C2
300 B3 C3
# in this example, the "calculation" is getting the squre of A1
kent$ awk '{$1*=$1}1' test.txt
10000 B1 C1
40000 B2 C2
90000 B3 C3
#If you want to get the result in a newfile.txt, do this:
kent$ awk '{$1*=$1}1' test.txt >newfile.txt
#then
kent$ cat newfile.txt
10000 B1 C1
40000 B2 C2
90000 B3 C3
编辑
在这里,我可以给您一个如何在awk中调用date
的示例:
kent$ echo "1359579362 B1 C1"|awk '{"date -d @"$1|getline $1}1'
Wed Jan 30 21:56:02 CET 2013 B1 C1
我想这就是你要找的
祝你好运。你的要求太不明确了!你是什么意思 我可以给你举个例子,希望对你有所帮助:
kent$ cat test.txt
100 B1 C1
200 B2 C2
300 B3 C3
# in this example, the "calculation" is getting the squre of A1
kent$ awk '{$1*=$1}1' test.txt
10000 B1 C1
40000 B2 C2
90000 B3 C3
#If you want to get the result in a newfile.txt, do this:
kent$ awk '{$1*=$1}1' test.txt >newfile.txt
#then
kent$ cat newfile.txt
10000 B1 C1
40000 B2 C2
90000 B3 C3
编辑
在这里,我可以给您一个如何在awk中调用date
的示例:
kent$ echo "1359579362 B1 C1"|awk '{"date -d @"$1|getline $1}1'
Wed Jan 30 21:56:02 CET 2013 B1 C1
我想这就是你要找的
祝你好运。如果你需要在这个问题上使用UNIX日期,而不是gawks内置的时间函数,那么只需在shell中完成这一切:
while read -r secs rest
do
echo "$(date -d @"$secs") $rest"
done < test.txt
读取时-r秒休息
做
echo“$(日期-d@“$secs”)$rest”
完成
如果可能的话,请使用gawk。如果您需要在这个问题上使用UNIX日期,而不是gawks内置的时间函数,那么只需在shell中完成这一切:
while read -r secs rest
do
echo "$(date -d @"$secs") $rest"
done < test.txt
读取时-r秒休息
做
echo“$(日期-d@“$secs”)$rest”
完成
如果可能的话,请使用gawk。谢谢您的回复。我还找到了“awk”。但我现在有另一个问题。我的计算是“date-d@这是绝对可行的。但是你必须在问题中写下要求,最好有示例输入和预期输出。@HaoShen对awk来说应该很容易。编辑你的问题使其正确。还有一个提示,gawk有
strftime([格式[,时间戳[,utc标志]]))
请检查手册页。我已经更新了问题。你的方法肯定有效。因为我不熟悉脚本语言,所以只剩下一些语法错误。谢谢你的回复。我也刚刚找到了“awk”。但我现在有另一个问题。我的计算是“date-d@这绝对可行。但是你必须在问题中写下需求,最好有示例输入和预期输出。@HaoShen对awk来说应该是一件容易的工作。编辑您的问题以使其正确。还有一个提示,gawk有strftime([format[,timestamp[,utc flag]])
请检查手册页。我已经更新了问题。你的方法肯定管用。因为我不熟悉脚本语言,所以只剩下一些语法错误。