我有一个长度未知的文本文件。有两个值在每一行: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