Text-Processing

僅列印多個第一個字元

  • February 6, 2019

我有一個大文本文件,我只想在一個命令行中列印每行的前 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命令替換。

引用自:https://unix.stackexchange.com/questions/498986