我有一个正在循环遍历的文件for
。我想做一些像...
for line in file.out; do echo "Some text before $line($2) $line($3)"; done
其中,对于每一行,我插入从该行到当前字符串的第二列和第三列。有没有一种简单的方法可以做到这一点?我可以从字符串中访问 awk 吗?
输入示例:
some.metric.tag_A 100500 1446043920
some.metric.tag_B 100501 1446043921
some.metric.tag_C 100502 1446043922
some.metric.tag_D 100503 1446043923
示例输出:
Some text before 100500 1446043920
Some text before 100501 1446043921
Some text before 100502 1446043922
Some text before 100503 1446043923
答案1
使用 awk
awk 隐式循环各行并将每行分隔为字段:
$ awk '{printf "Some text before %s %s\n",$2,$3}' file.out
Some text before 100500 1446043920
Some text before 100501 1446043921
Some text before 100502 1446043922
Some text before 100503 1446043923
如果我们知道输入文件始终只有三列,那么该命令可以缩短为(帽子提示:Don Crissti):
$ awk '{$1="Some text before"} 1' file.out
使用外壳
可以使用 shell 的read
语句将行分成字段:
$ while read a b c d; do echo "Some text before $b $c" ; done <file.out
Some text before 100500 1446043920
Some text before 100501 1446043921
Some text before 100502 1446043922
Some text before 100503 1446043923