bash-{$1=$1;print $0}中關於$1 = $1的小疑問

原例子出處:https://blog.csdn.net/xuejinliang/article/details/52250599

文件cat dir.txt如下:
(說明下#符號無法顯示,就用%代替,實際上是#符號哈)
%
1
2
3
%
4
5
%
6
7
8
9
%

使输出结果为
1 2 3
4 5
6 7 8 9

处理的方式如下
原貼:

awk ‘{RS=”#\n”;ORS=”\n”;OFS=” ”;}NR!=1{$1=$1;print $0}’ file

實際上我發現下面也可以:

cat dir.txt | awk 'BEGIN{RS="#\n"}NR>1{$1=$1;print $0}'

疑問:
這裡的$1=$1有什麼作用呢?不加的話輸出如下:

$ cat dir.txt | awk 'BEGIN{RS="#\n"}NR>1{print $0}'
1
2
3

4
5

6
7
8
9

目前我也只在OFS和ORS對輸出結果進行分隔定義時才用到這個,那麼是否$1 = $1本身有對字段重新定義輸出的作用呢?即針對上述 1\n2\n3\n 作為一行來處理的數據,重新定義字段後實際上會格式化為1 2 3模式。

先留個問題待解決吧

你可能感兴趣的:(bash)