如何在unix中读取文本文件的第n行和第m个字段

时间:2018-06-07 05:06:32

标签: unix sed cut

假设我有| delimeted文件,

Line1:    1|2|3|4
Line2:    5|6|7|8
Line3:    9|9|1|0

现在我需要在第二行读取3个字段,在上面的例子中是7,我如何使用Cut或Sed Command来做到这一点。我是unix的新手请帮忙

3 个答案:

答案 0 :(得分:2)

awk的作业:

awk -F '|' 'NR==2{print $3}' file

awk -F '|' -v row=2 -v col=3 'NR==row{print $col}' file

输出:

7

答案 1 :(得分:0)

这应该有效:

Optional({ CIAttributeClass = CIImage; CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image."; CIAttributeDisplayName = Image; CIAttributeType = CIAttributeTypeImage; }) Optional({ CIAttributeClass = NSNumber; CIAttributeDefault = 1; CIAttributeDescription = "The amount of saturation to apply. The larger the value, the more saturated the result."; CIAttributeDisplayName = Saturation; CIAttributeIdentity = 1; CIAttributeMin = 0; CIAttributeSliderMax = 2; CIAttributeSliderMin = 0; CIAttributeType = CIAttributeTypeScalar; })

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -rn '2s/^(([^|]*)\|?){3}.*/\2/p' file

通过设置-n选项关闭自动打印,通过-r选项启用更容易的正则表达式声明。使用模式匹配和反向引用将整个第二行替换为同一行的第三个字段并打印结果。

替换命令的地址仅限于第二行。

正则表达式将非分隔字符后跟分隔符分组特定次数。第二组仅保留特定数字的非分隔字符。每个分组都被下一个分组替换,因此报告了最后一个分组,.*消耗了该行的剩余部分,因此只打印了第三个字段(第二组的内容)。

N.B。分隔符将出现在最后一列之后,因此是可选的\|?