我有一個長度未知的文本文件。有兩個值在每一行:Bash腳本:按行編輯.txt
VALUE1[SPACE]VALUE2
現在我已經得到另一個(或相同)有了這樣一個新的列表文件:
0.0.0.0/rep/com/bla/blub/VALUE1/VALUE2/VALUE1-VALUE2.zip
...每行我都在列出兩個值。我怎樣才能做到這一點?
我有一個長度未知的文本文件。有兩個值在每一行:Bash腳本:按行編輯.txt
VALUE1[SPACE]VALUE2
現在我已經得到另一個(或相同)有了這樣一個新的列表文件:
0.0.0.0/rep/com/bla/blub/VALUE1/VALUE2/VALUE1-VALUE2.zip
...每行我都在列出兩個值。我怎樣才能做到這一點?
這是awk的一個很好的用例(更新照顧括號中):
awk -F" " '{ gsub("\\(", "", $1); gsub("\\)", "", $2);print "0.0.0.0/rep/com/bla/blub/"$1"/"$2"/"$1"-"$2".zip"}' test.txt > yournewfile.txt
這將每行分裂以空格,更換開口括號中的第一令牌$1
並在第二托克$2
更換右括號,然後在它們各自的令牌$1
和使用值0您輸出的字符串爲print
我假設VALUE1
和VALUE2
不包含空格,否則第一個定義變得模糊。有了這個假設,您可以使用cut
在第一空間分割線構成filename
變量使用字符串插值:
cat txt-File | while read VALUE1 VALUE2 _; do
filename="0.0.0.0/rep/com/bla/blub/$VALUE1/$VALUE2/$VALUE1-$VALUE2.zip"
# Do something with filename...
stat "$filename"
done
輸入數據文件的格式爲(VALUE1 VALUE2).
。你先刪除初始(
,和後者).
有很多方法可以做到這一點,這裏是一個
sed 's/(//g' yourfile | sed 's/).//g'
然後,您可以通過這個交給awk
。這裏$1
對應於第一列,並$2
到第二:
sed 's/(//g' yourfile | sed 's/).//g' | awk '{print "0.0.0.0/rep/com/bla/blub/"$1"/"$2"/"$1"-"$2".zip"}'
我會用sed
此:
sed $'s,^[ \t]*\([^ \t]*\)[ \t][ \t]*\([^ \t]*\).*$,0.0.0.0/rep/com/bla/blub/\1/\2/\1-\2.zip,' filename >new-filename
如果您願意加入-i.bak
您可以修改,以取代原有的文件: sed -i.bak $'s,
... ,'
。
這隻適用於第一個值集或不是?我需要逐行進行編輯,以獲得每行與此行的值的鏈接:/ – xsus 2015-02-23 15:24:44
這將遍歷輸入文件中的每一行,並在輸出文件中創建一個新行。 – JNevill 2015-02-23 20:53:10
請取消刪除[您最近的SQL答案](http://stackoverflow.com/a/28683389/57611)。對於除OP之外的其他人仍然有幫助(只要清楚它只能在SQL Server 2012及更高版本中運行)。 – ErikE 2015-02-23 21:28:16