[英]How to cut out the Values from a list of Key-Value pairs
我有一個包含多個KV對的文件。
輸入:
$ cat input.txt
k1:v1 k2:v2 k3:v3
...
我只對價值觀感興趣。 鍵(名稱)只是為了記住每個值的含義。 本質上,我希望將鍵cut
出,以便可以繪制值列。
輸出:
$ ...
v1 v2 v3
他們的單線bash命令可以幫助我實現這一目標嗎?
更新
這就是我目前的做法(看起來很丑)
>> cat input.txt | python -c "import sys; \
lines = sys.stdin.readlines(); \
values = [[i.split(':')[1] for i in item] for item in \
[line.split() for line in lines]]; \
import os; [os.system('echo %s'%v) for v in \
['\t'.join(value) for value in values]]" > output.txt
這樣可以嗎
sed -r 's/\w+://g' yourfile
測試:
kent$ echo "k1:v1 k2:v2 k3:v3"|sed -r 's/\w+://g'
v1 v2 v3
如果您的密鑰包含“-”等,則更新良好:請參見下文
kent$ echo "k1#-$%-^=:v1 k2:v2 k3:v3"|sed -r 's/[^ ]+://g'
v1 v2 v3
awk -v FS=':' -v RS=' ' -v ORS=' ' '{print $2}' foo.txt
http://www.gnu.org/software/gawk/manual/gawk.html#Field-Separators
我看到sed
, awk
和python
,所以這里是普通的bash
:
while IFS=' ' read -a kv ; do printf '%s ' "${kv[@]#*:}" ; done < input.txt
出於很好的考慮,這是一個perl
版本:
perl -n -e 'print(join(" ",values%{{@{[split(/[:\s]/,$_)]}}})," ")' < input.txt
但是,值的順序會更改,因此可能不是您想要的。
用awk解決方案:
awk '{split($0,p," "); for(kv in p) {split(p[kv],a,":"); printf "%s ",a[2];} print ""}' foo.txt
嘗試這個
Input.txt
k1:v1 k2:v2 k3:v3
碼
awk -F " " '{for( i =1 ; i<=NF ;i+=1) print $i}' Input.txt | cut -d ":" -f 2 | tr '\n' ' '
輸出量
v1 v2 v3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.