如何从字符串中访问一行的列?

如何从字符串中访问一行的列?

我有一个正在循环遍历的文件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

相关内容