我必須根據運動欄是射擊或柔道的條件將“名稱”欄從小寫更改為大寫。
到目前為止,我在終端中使用了 anubhava 提供的以下代碼,但不在腳本中:
sed -E 's/^([^,]*,)([^,] )((,[^,]*){5},(shooting|judo),)/\1\U\2\L\3/'
一些輸入:
id,name,nationality,sex,date_of_birth,height,weight,sport,gold,silver,bronze,info
388896171,Abdelraouf Benguit,ALG,male,1985-07-03,1.83,90,judo,0,0,0,
285603057,Abderrahmane Mansouri,ALG,male,1995-01-13,1.72,66,cycling,0,0,0,
545134894,Abderrahmane Meziane,ALG,male,1994-03-07,1.68,62,football,0,0,0,
969824503,Abdullah Alrashidi,IOA,male,1963-08-21,1.83,84,shooting,0,0,1,
897549624,Abdullah Hel Baki,BAN,male,1989-08-01,,,shooting,0,0,0,
153457,Abdullahi Shehu,NGR,male,1993-03-12,1.70,,football,0,0,1,
預期輸出:
id,name,nationality,sex,date_of_birth,height,weight,sport,gold,silver,bronze,info
388896171,ABDELRAOUF BENGUIT,ALG,male,1985-07-03,1.83,90,judo,0,0,0,
285603057,Abderrahmane Mansouri,ALG,male,1995-01-13,1.72,66,cycling,0,0,0,
545134894,Abderrahmane Meziane,ALG,male,1994-03-07,1.68,62,football,0,0,0,
969824503,ABDULLAH ALRASHIDI,IOA,male,1963-08-21,1.83,84,shooting,0,0,1,
897549624,ABDULLAH HEL BAKI,BAN,male,1989-08-01,,,shooting,0,0,0,
153457,Abdullahi Shehu,NGR,male,1993-03-12,1.70,,football,0,0,1,
此代碼將進入腳本并使用 sed -f 執行。它需要與 sed 一起使用。
該腳本基本上是以下幾行:
s/ESP/Spain/g
s/DEN/Denmark/g
s/NED/netherlands/g
s/^([^,]*,)([^,] )((,[^,]*){5},(shooting|judo),)/\1\U\2\L\3/
/[0],[0],[0],$/d
1 c id,name,nationality,sex,date_of_birth,height,weight,sport,gold,silver,bronze,info
我這樣呼叫腳本:
$ sed -f script3_3.sed athletesv22.csv
謝謝,
uj5u.com熱心網友回復:
sed這不是正確的工具。你應該考慮awk。
您可以使用這樣的awk解決方案:
awk 'BEGIN {FS=OFS=","} NR > 1 && $8 ~ /^(shooting|judo)$/ {
$2 = toupper($2)} 1' file.csv
id,name,nationality,sex,date_of_birth,height,weight,sport,gold,silver,bronze,info
388896171,ABDELRAOUF BENGUIT,ALG,male,1985-07-03,1.83,90,judo,0,0,0,
285603057,Abderrahmane Mansouri,ALG,male,1995-01-13,1.72,66,cycling,0,0,0,
545134894,Abderrahmane Meziane,ALG,male,1994-03-07,1.68,62,football,0,0,0,
969824503,ABDULLAH ALRASHIDI,IOA,male,1963-08-21,1.83,84,shooting,0,0,1,
897549624,ABDULLAH HEL BAKI,BAN,male,1989-08-01,,,shooting,0,0,0,
153457,Abdullahi Shehu,NGR,male,1993-03-12,1.70,,football,0,0,1,
要將更改行內保存到輸入檔案,請使用此gnu-awk解決方案:
awk -i inplace 'BEGIN {FS=OFS=","}
NR > 1 && $8 ~ /^(shooting|judo)$/ {$2 = toupper($2)} 1' file.csv
或者,如果您沒有,gnu-awk則使用:
awk 'BEGIN {FS=OFS=","} NR > 1 && $8 ~ /^(shooting|judo)$/ {
$2 = toupper($2)} 1' file.csv > _tmp_ && mv _tmp_ file.csv
此gnu-sed解決方案應該適合您:
sed -E 's/^([^,]*,)([^,] )((,[^,]*){5},(shooting|judo),)/\1\U\2\L\3/' file.csv
id,name,nationality,sex,date_of_birth,height,weight,sport,gold,silver,bronze,info
388896171,ABDELRAOUF BENGUIT,alg,male,1985-07-03,1.83,90,judo,0,0,0,
285603057,Abderrahmane Mansouri,ALG,male,1995-01-13,1.72,66,cycling,0,0,0,
545134894,Abderrahmane Meziane,ALG,male,1994-03-07,1.68,62,football,0,0,0,
969824503,ABDULLAH ALRASHIDI,ioa,male,1963-08-21,1.83,84,shooting,0,0,1,
897549624,ABDULLAH HEL BAKI,ban,male,1989-08-01,,,shooting,0,0,0,
153457,Abdullahi Shehu,NGR,male,1993-03-12,1.70,,football,0,0,1,
作業演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458792.html
