bash script2023. 9. 4. 08:48

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/611783

화면에 결과를 출력할 때 행번호를 같이 표시할 필요하 있다면 nl을 이용할 수 있다. 아래의 예시를 보자.

cat my_file.txt | nl
     1  abc
     2  def
     ...

nl에서 아무련 옵션을 주지 않았을 경우, 6칸을 행번호 폭으로 할당하고 행번호와 출력 내용은 탭(tab)으로 구분된다. 만약 행번호의 폭을 1칸으로 하려면 -w 옵션을 사용하고, 구분자를 바꾸고 싶다면 -s 옵션을 사용하면 되겠다.

# 행번호 폭 1칸, 구분자 콜론(:)
cat my_file.txt | nl -w 1 -s ":"
1:abc
2:def
...
9:abc
10:def
...

출력 행수가 많아서 행번호 자리수가 -w에서 지정한 폭을 넘어갈 경우에는 당연히 그만큼 폭을 더 할당하게 된다. 위의 예시에서는 폭을 1칸으로 지정했지만 행번호가 10이 넘어가면서부터 2칸이 되었다.

행번호를 출력하기 위한 또 한가지 방법은 awk를 이용하는 것이다. awk에 행번호에 대응하는 내부 변수 NR이 있으므로 이것을 활용하면 되겠다. awk에서 print 명령으로 행번호(NR)와 구분자, 그리고 결과 행 전체($0)를 출력하게 하면 된다.

# 행번호 출력, 구분자 탭(tab)
cat my_file.txt | awk '{ print NR "\t" $0 }'

# 행번호 출력, 구분자 콜론(:)
cat my_file.txt | awk '{ print NR ":" $0 }'

awk를 사용할 경우에는 printf를 이용해서 표시 형식을 좀 더 구체적으로 지정하는 것도 가능.

# 행번호를 폭 3칸으로 출력, 구분자 콜론(:)
cat my_file.txt | awk '{ printf "%3d:%s\n", NR, %0 }'

728x90
Posted by 반달가면