返回文本字符串的中间部分

时间:2012-06-25 03:16:56

标签: awk

以下awk语句按预期工作。 它返回由|

分隔的文本文件中的第1列,第2列和最后4列
awk '{print $1,"|", $2,"|", $(NF-3), "|",$(NF-2), "|", $(NF-1),"|", $(NF)}'

我想在两者之间返回中间列。换句话说,我需要将以下行中的$ something替换为可行的东西。

awk '{print $1, $2, $something, $(NF-3), $(NF-2) $(NF-1), $(NF)}'

可以有3到11列代替变量。

1 个答案:

答案 0 :(得分:1)

我想我已经理解了你期望输出看起来像什么。试试这一行awk

awk 'BEGIN { OFS="|" } { for (i=1; i<=NF; i++) if (i <= 3 || i >= NF - 3) printf "%s"OFS, $i; else printf "%s", $i; print "" }' file.txt

测试输入:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y13 Y14
101 102 103 104 1010 1011 1012 1013 1014

测试输出:

1|2|3|4567891011|12|13|14
X1|X2|X3|X4X5X6X7X8X9X10X11|X12|X13|X14
Y1|Y2|Y3|Y4Y5Y6Y7Y8Y9Y10Y11|Y12|Y13|Y14
101|102|103|10410101011|1012|1013|1014

HTH