我有一個制表符分隔檔案,如果滿足以下條件,我想在第三列中洗掉第一個單詞:1.第一個單詞全部小寫,2.第二個單詞大寫。除非整個字串是小寫的,否則修剪掉任何超過 2 個單詞的內容。理想情況下,我想用 awk 做到這一點,但也可以使用 sed 之類的東西。
我設法讓它與 sed 和 awk 一起使用,但僅與特定列一起使用,但我想獲得整行。我不知道如何讓 sed 僅在該列上找到模式,從我讀到的內容來看,awk 不允許反向參考,我不知道如果沒有它該怎么做。
cat text.txt |
awk -F"\t" '{print $3}' |
sed -E 's/^[a-z]* ([A-Z])/\1/' |
awk '{if($1 ~ /^[[:upper:]]/) {print $1, $2} else {print $0}}'
我有的:
col1 col2 col3
123 a string James jones MD MSc
154 string mister George smith
163 String mrs anne jones
193 String john
157 big string 1 dude George
我想得到什么:
col1 col2 col3
123 a string James jones
154 string George smith
163 String mrs anne jones
193 String john
157 big string 1 George
uj5u.com熱心網友回復:
您可以使用此awk解決方案:
awk '
BEGIN {FS=OFS="\t"}
NR > 1 && tolower($3) != $3 && split($3, a, / /) >= 2 {
p = (a[1] == tolower(a[1]) ? 2 : 1)
$3 = a[p] (p < length(a) ? " " a[p 1] : "")
}
1' file
col1 col2 col3
123 a string James jones
154 string George smith
163 String mrs anne jones
193 String john
157 big string 1 George
在線代碼演示
uj5u.com熱心網友回復:
$ cat tst.awk
BEGIN { FS=OFS="\t" }
match($3,/^[[:lower:]] [[:upper:]]/) {
$3 = substr($3,RLENGTH)
}
($3 ~ /[[:upper:]]/) && match($3,/[^ ] [^ ] /) {
$3 = substr($3,RSTART,RLENGTH)
}
{ print }
$ awk -f tst.awk file
col1 col2 col3
123 a string James jones
154 string George smith
163 String mrs anne jones
193 String john
157 big string 1 George
上面的列是制表符分隔的,以可視化這些列對齊:
$ awk -f tst.awk file | column -s$'\t' -t
col1 col2 col3
123 a string James jones
154 string George smith
163 String mrs anne jones
193 String john
157 big string 1 George
uj5u.com熱心網友回復:
使用sed
$ sed s'/\(\([^\t]*\t\ \)\{2\}\)\([[:lower:]]* \)\?\([[:upper:]][^ ]* \?\)\([^ ]*\).*/\1\4\5/' input_file
col1 col2 col3
123 a string James jones
154 string George smith
163 String mrs anne jones
193 String john
157 big string 1 George
uj5u.com熱心網友回復:
這可能對您有用(GNU sed):
sed -E 's/^(.*\t)(([ [:lower:]] )|([[:lower:]] )?([[:upper:]]\S ( \S )?).*)$/\1\3\5/' file
保留前兩個選項卡欄位。
如果第三個或后續欄位都是小寫的,請保留它們。
但是,如果第一個單詞是小寫的,而第二個單詞以大寫字符開頭,則洗掉第三個欄位的第一個單詞以及此后第四個單詞的任何后續單詞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/493697.html
上一篇:為什么python腳本在pycharm中運行和在命令提示符下運行時的行為不同?
下一篇:從bash選單執行一個選項
