我處理一個具有許多域的文本檔案,例如
abcd.efgh.ijkl.mnop
無論開頭還是結尾,我都希望在同一行添加一個3。
目前我使用
sed 's/[^.]//g' thetextfile | awk '{ print length }' > thenumber
然后我使用 librecalc 來組合它們。
uj5u.com熱心網友回復:
這應該這樣做:
while read z;do echo $(echo "$z"|sed 's/[^\.]//g'|wc -m) $z;done < input.txt
這將產生:
3 abcd.efgh.ijkl.mnop
6 abcd.efgh.ijkl.mnop...
4 abcd.efgh.ijkl.mnop.
uj5u.com熱心網友回復:
使用 perl one-liner,利用tr回傳更改的數量:
$ perl -ne 'print tr/././, " ", $_' input.txt
3 abcd.efgh.ijkl.mnop
6 abcd.efgh.ijkl.mnop...
4 abcd.efgh.ijkl.mnop.
uj5u.com熱心網友回復:
簡單地說bash,不使用任何外部實用程式:
#!/bin/bash
while read -r line; do
dots=${line//[^.]}
printf '%d\t%s\n' ${#dots} "$line"
done < file
uj5u.com熱心網友回復:
顯而易見的答案是
awk -F . '{ print NF-1, $0 }' thetextfile >thenumber
將結果組合到外部實用程式中的單個檔案似乎過于復雜;只需一口氣處理所有檔案。
awk -F . '{ print NF-1, $0 }' * >allnumbers
或者如果您的需求更復雜,可能類似于
for file in *; do
echo "$0: processing $file ..." >&2
awk -F . '{ print NF-1, $0 }' "$file"
done >allnumbers
該-F .說,使用文字作為點現場分隔符,NF是欄位的數量(這將是一個比分隔符的數量多;查找“柵欄柱的錯誤”,如果你不明白為什么)。
在更復雜的情況下,>>allnumbers如果您確實需要,可以將每個檔案的輸出附加到回圈內部(但要明白,這比只在 之后寫入一次效率低done)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/395571.html
