Text-Processing
僅列印多個第一個字元
我有一個大文本文件,我只想在一個命令行中列印每行的前 4 個、前 5 個和前 8 個字元。
例如,我有以下幾行:
123456789ab ABCdefgih55
所以輸出必須是:
1234 ABCd 12345 ABCde 12345678 ABCdefgh
for len in 4 5 8; do cut -c "1-$len" file done
這
cut -c
會重複使用來剪切文件的每一行的第一部分,稱為file
. 切出位的長度取決於循環變數len
。如果您嚴格遵守“單線”標準:
for len in 4 5 8; do cut -c "1-$len" file; done
或者,作為一個易於使用的 shell 函式:
cut_to_lengths () { file=$1; shift for len do cut -c "1-$len" "$file" done }
使用它:
$ cut_to_lengths file 4 5 8 1 1234 ABCd 12345 ABCde 12345678 ABCdefgi 1 A
在註釋中,您指定如果切割長度較短,則不輸出線。
為此,我們可以將
cut
命令更改為awk
命令:awk -v len="$len" 'length >= len { print substr($0, 1, len) }'
cut -c "1-$len"
在上面的程式碼中用上面的awk
命令替換。