0

我只是脚本语言的新手。

现在我有一个文件,里面是:

>   A1 B1 C1
>   A2 B2 C2
>   A3 B3 C3

我只想使用 shell 脚本(bash)逐个元素地读取文件。然后我想对元素 A1、A2 和 A3 进行一些计算,然后将它们写回新文件(或旧文件)。所以新文件将是(假设计算结果为 D1,D2 和 D3):

 D1 B1 C1
 D2 B2 C2
 D3 B3 C3

计算是通过命令“date -d @(A's value)”将 Unix 纪元时间(A 的值)转换为人类可读的时间(D 的值)。

我尝试使用 awk 命令:

awk '{$1=`date -d @$1`}' test.txt

但它似乎有一些语法错误:>错误是:

awk: {$1=`date -d @$3`}
awk:     ^ invalid char '`' in expression
4

2 回答 2

2

你的要求太不清楚了!你的意思是什么计算?

我可以给你举个例子,希望对你有帮助:

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

编辑

在这里我可以给你一个如何date在 awk 中调用的例子:

kent$  echo "1359579362 B1 C1"|awk '{"date -d @"$1|getline $1}1'                                                                                                            
Wed Jan 30 21:56:02 CET 2013 B1 C1

我想这就是你要找的。

祝你好运。

于 2013-01-30T20:29:41.793 回答
1

如果您需要在此使用 UNIX 日期而不是 gawks 内置时间函数,则只需在 shell 中完成所有操作:

while read -r secs rest
do
   echo "$(date -d @"$secs") $rest"
done < test.txt

如果可能,请使用 gawk。

于 2013-01-31T01:31:18.887 回答