如果要像下面这样从一行中的定界文件(定界符“ ||”)中提取2列,可以很容易地完成

foo||bar||baz||quux


通过

cut -d'||' -f1 file_name


但在我的情况下,单行记录的文件记录转到下一行,例如:

foo||bar||baz||quux||foo||bar||baz||quux||foo||bar||baz||quux
||quux||bar||baz||quux||foo||bar||baz||quux||foo||bar||baz||quux


它从上述命令的输出是

foo
quux


相反,它应该只是“ foo”,因为它在第一列中。

文件包含在第1行

foo||bar||baz||quux||foo||bar||baz||quux||foo||bar||baz||quux
||quux||bar||baz||quux||foo||bar||baz||quux||foo||bar||baz||quux


文件包含在第2行

foo2||bar2||baz2||quux2||foo2||bar2||baz2||quux2||foo2||bar2||baz2||quux2
||quux2||bar2||baz2||quux2||foo2||bar2||baz2||quux2||foo2||bar2||baz2||quux2


输出应该是

foo
foo2

最佳答案

几乎,但是-d开关仅占用一个字符:

cut -d'|' -f1 file_name


输出:

foo
foo2




注意:由于定界符加倍,因此如果字段号大于1,-f开关将无法按预期工作。一种处理方法是将字段调整为等于“ 2n-1”。因此,要获取字段3,请执行-f$(( (3*2) - 1 ))

09-27 17:51