我只是想將我的查詢納入單行查詢。
我有一個下面的檔案內容,我想在最后一個冒號(:)之前洗掉所有內容,包括它自己,然后將逗號(,)替換為換行符以獲得所需的結果。
這些所有逗號分隔的值都是 linux 用戶 ID
檔案內容:
pa_tools:x:2998:nep08569,nep08623,nep14587,kpc12117,tpa06038,tpa10226,tpa14459,tpa14596,tpa21272,tpa28233,tpa32495,cpf30049,cpf32734,cpf38753,cpf41124,cpf41645,cpf42488,cpf42609,cpf54284,cpf55701,cpf56556,cpf61223,cpf64941,cpf66553,cpf69011,cpf72912,pfc37974,pfc40981,pfc48626,pfc69581,pfc80043,pfc82969,pfc84163,pfc87399,pfc87990,pfc87991,pfc98638,pa_tools_rs
已經嘗試過:
作業解決方案:
1- $ sed -e 's/.*://g' -e 's/\,/\n/g' test_g
2- $ awk -F: '{print $NF}' test_g| awk 'BEGIN{RS=","}{$1=$1}1'
3- $ cat test_g| tr "," "\n"| tr ":" "\n" | sed '1,3d'
結果:
$ sed -e 's/.*://g' -e 's/\,/\n/g' test_g
nep08569
nep08623
nep14587
kpc12117
tpa06038
tpa10226
tpa14459
tpa14596
tpa21272
tpa28233
tpa32495
cpf30049
cpf32734
cpf38753
cpf41124
cpf41645
cpf42488
cpf42609
cpf54284
cpf55701
cpf56556
cpf61223
cpf64941
cpf66553
cpf69011
cpf72912
pfc37974
pfc40981
pfc48626
pfc69581
pfc80043
pfc82969
pfc84163
pfc87399
pfc87990
pfc87991
pfc98638
pa_tools_rs
有沒有更好的技巧,請指教。
uj5u.com熱心網友回復:
您可以在以下任何版本上使用此解決方案awk:
awk -F: '{$0 = $NF; gsub(/,/, "\n")} 1' file
nep08569
nep08623
nep14587
kpc12117
tpa06038
tpa10226
tpa14459
tpa14596
tpa21272
tpa28233
tpa32495
cpf30049
cpf32734
cpf38753
cpf41124
cpf41645
cpf42488
cpf42609
cpf54284
cpf55701
cpf56556
cpf61223
cpf64941
cpf66553
cpf69011
cpf72912
pfc37974
pfc40981
pfc48626
pfc69581
pfc80043
pfc82969
pfc84163
pfc87399
pfc87990
pfc87991
pfc98638
pa_tools_rs
使用gnu-sed它會類似于您嘗試的代碼:
sed 's/.*://; s/,/\n/g' file
uj5u.com熱心網友回復:
使用 sed
$ sed 's/.*:\([^,]*\)\|,/\n\1/g' input_file
nep08569
nep08623
nep14587
kpc12117
tpa06038
tpa10226
tpa14459
tpa14596
tpa21272
tpa28233
tpa32495
cpf30049
cpf32734
cpf38753
cpf41124
cpf41645
cpf42488
cpf42609
cpf54284
cpf55701
cpf56556
cpf61223
cpf64941
cpf66553
cpf69011
cpf72912
pfc37974
pfc40981
pfc48626
pfc69581
pfc80043
pfc82969
pfc84163
pfc87399
pfc87990
pfc87991
pfc98638
pa_tools_rs
uj5u.com熱心網友回復:
與sed:
sed 's/.*://; s/,/\n/g' file
# needs to be a sed the supports \n
# GNU and recent BSD do support \n but that is a superset
# of POSIX
如果您sed不支持\n替換,則使用文字轉義新行:
sed 's/.*://; s/,/\
/g' file
或用于tr替換,為\n:
sed 's/.*://' file | tr ',' '\n'
所有三個列印:
nep08569
nep08623
nep14587
...
pfc87991
pfc98638
pa_tools_rs
uj5u.com熱心網友回復:
和 猛擊
data=$(< test_g) # read the file
id_csv=${data##*:} # remove the prefix
IFS=, read -ra ids <<< "$id_csv" # split into an array
最后兩步可以合并
IFS=, read -ra ids <<< "${data##*:}"
然后,使用以下之一輸出:
printf '%s\n' "${ids[@]}"
(IFS=$'\n'; echo "${ids[*]}")
join() { local IFS=$1; shift; echo "$*"; }
join $'\n' "${ids[@]}"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/377413.html
上一篇:CMakeC 專案librealsense:使用CLion對OpenGL的未定義參考
下一篇:PHPGD安裝問題
