【问题标题】:Print result to every second line of output file in awk将结果打印到 awk 中输出文件的每隔一行
【发布时间】:2014-03-06 20:10:42
【问题描述】:

似乎还没有人偶然发现我的问题,所以就这样吧。
所以集合说,我想取输入文件的每隔一行2nd,4th,6th etc 的第三列$3(我知道怎么做),然后在输出文件中完全相同的位置打印结果。
我的意思是,2nd 输入行的$32nd 输出行的$3 并继续。

我想要这个,使用 bash 中的 awk。

【问题讨论】:

  • 请发布您尝试过的内容。
  • 我什么都没试过。对于输入我做了 awk -F " " 'NR%2==0 {print $3}' input.txt ,得到了我想要的结果。但我不知道如何为 output.sorry 编码。
  • @markos89,请发布示例输入和输出。

标签: bash awk


【解决方案1】:

这里是使用awk的方法

awk 'FNR==NR {a[NR]=$3;next} FNR%2==0 {$3=a[FNR]}1' firstfile secondfile

这将从firstfile 获取数据并使用$3 列和每隔一行更新secondfile
数据被替换在相同的位置。

cat firstfile
1 one green
2 two red
3 three blue
4 four orange
5 five yellow
6 six brown

cat secondfile
1 one jan
2 two feb
3 three mars
4 four april
5 five jun
6 six juli

运行awk 命令:

1 one jan
2 two red
3 three mars
4 four orange
5 five jun
6 six brown

也将数据存储回secondfile

awk 'FNR==NR {a[NR]=$3;next} FNR%2==0 {$3=a[FNR]}1' firstfile secondfile > tmp && mv tmp secondfile 

【讨论】:

  • 非常感谢@Jotne。如果你能解释一下'}'后面的“1”是什么意思。非常感谢。
  • 1 是一个命令,它将执行默认操作(打印该行),所以1 = 1 {print} = 1 {print $0}
【解决方案2】:

您似乎无法很好地解释您想要什么,所以我猜测一下,也许您可​​以说出哪里错了,它会通过排除的过程来解决......

给定一个名为 file 的输入文件,如下所示:

Line 0,field2,field3,90
Line 1,field2,field3,80
Line 2,field2,field3,82
Line 3,field2,field3,21 
Line 4,field2,field3,85

下面的 awk 将在找到它的地方打印每隔一行的 field3,但周围没有其他东西:

awk -F, 'NR%2{print ",,"$3"\n,,";}' file

输出:

,,field3
,,
,,field3
,,
,,field3
,,

【讨论】:

    最近更新 更多