awk将文件最后一行复制并移动到上面的上一行

awk将文件最后一行复制并移动到上面的上一行,awk,Awk,在下面的awk中,我只想把最后一行移到它上面的那一行。下面的问题是,由于我的输入文件不同(不总是像下面那样有4行),我不能每次都使用I=3,似乎无法修复它。谢谢:) 文件 this is line 1 this is line 2 this is line 3 this is line 4 所需输出 this is line 1 this is line 2 this is line 4 this is line 3 awk(似乎最后一行正在移动,但移动到i=2) awk' {lines[N

在下面的
awk
中,我只想把最后一行移到它上面的那一行。下面的问题是,由于我的输入文件不同(不总是像下面那样有4行),我不能每次都使用
I=3
,似乎无法修复它。谢谢:)

文件

this is line 1
this is line 2
this is line 3
this is line 4
所需输出

this is line 1
this is line 2
this is line 4
this is line 3
awk(似乎最后一行正在移动,但移动到i=2)

awk'
{lines[NR]=$0}
结束{
打印行[1],行[NR];

对于(i=3;i你差一点就拿到了。你只要改变顺序就行了

awk '
    {lines[NR]=$0}
    END{
        for (i=1; i<NR-1; i++) {print lines[i]}
        print lines[NR];
        print lines[NR-1];
    }
' OFS=$'\n' file
awk'
{lines[NR]=$0}
结束{

对于(i=1;i尝试以下awk一次:

awk '{a[FNR]=$0} END{for(i=1;i<=FNR-2;i++){print a[i]};print a[FNR] ORS a[FNR-1]}'  Input_file

awk'{a[FNR]=$0}END{for(i=1;i我要反转文件,先交换两行,然后重新反转文件

tac file | awk 'NR==1 {getline line2; print line2} 1' | tac
非常感谢大家:)。
awk -v lines=$(wc -l < Input_file) 'FNR==(lines-1){val=$0;next} FNR==lines{print $0 ORS val;next} 1'  Input_file
tac file | awk 'NR==1 {getline line2; print line2} 1' | tac
$ seq 4 | awk 'NR>2{print p2} {p2=p1; p1=$0} END{print p1 ORS p2}'
1
2
4
3

$ seq 7 | awk 'NR>2{print p2} {p2=p1; p1=$0} END{print p1 ORS p2}'
1
2
3
4
5
7
6