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]])
请检查手册页。我已经更新了问题。你的方法肯定管用。因为我不熟悉脚本语言,所以只剩下一些语法错误。