我有一些数据文件,我需要提取一些信息。我想使用一个 awk 脚本来获取数据,这样我就可以将一些数据吸入 bash 数组中。
为此,我们假设我需要以下内容(1 索引): - 我需要 awk 打印第一列的第 2、3 和 4 行 - 我需要 awk 在第 8 行及以上打印第 1、2 和 3 列。但我希望所有列一在第二列之前打印,第二列在第三列之前打印。
使用以下数据示例:
abc
def
ghi
jkl
mno
1a1
2b2
11 22 33 44
55 66 77 88
99 00 12 13
14 15 16 17
我希望 awk 打印字符串:
def ghi jkl 11 55 99 14 22 66 00 15 33 77 12 16
我创建了以下内容,我认为它可以工作,但我收到一条错误消息“END bocks 必须有一个操作部分”。
awk '
BEGIN {i=0;}
{
if ((NR >= 2) && (NR <= 4))
print $1;
if (NR >= 8)
{
col1_arr[i] = $1;
col2_arr[i] = $2;
col3_arr[i] = $3;
i++;
}
}
END
{
for (j = 0; j < i; j++)
print col1_arr[j];
for (j = 0; j < i; j++)
print col2_arr[j];
for (j = 0; j < i; j++)
print col3_arr[j];
}' /path/to/my/file
提前致谢。
最佳答案
这应该有效 -
awk '
BEGIN{i=0;}
NR>=2 && NR<=4 {printf $1" "}
NR >=8 {col1[i]=$1;col2[i]=$2;col3[i]=$3;i++;}
END{for (i=0;i<=NR-8;i++) printf col1[i]" "; for(i=0;i<=NR-8;i++) printf col2[i]" ";for (i=0;i<=NR-8;i++) printf col3[i]" "}' INPUT_FILE
[jaypal:~/Temp] cat data
abc
def
ghi
jkl
mno
1a1
2b2
11 22 33 44
55 66 77 88
99 00 12 13
14 15 16 17
[jaypal:~/Temp] awk '
BEGIN{i=0;}
NR>=2 && NR<=4 {printf $1" "}
NR >=8 {col1[i]=$1;col2[i]=$2;col3[i]=$3;i++;}
END{for (i=0;i<=NR-8;i++) printf col1[i]" "; for(i=0;i<=NR-8;i++) printf col2[i]" ";for (i=0;i<=NR-8;i++) printf col3[i]" "}' data
def ghi jkl 11 55 99 14 22 66 00 15 33 77 12 16
关于linux - awk 脚本在特定行打印信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8492805/