我有一个长度未知的文本文件。每行有两个值:
VALUE1[SPACE]VALUE2
现在我必须使用新的List获取另一个(或相同的)文件,如:
0.0.0.0/rep/com/bla/blub/VALUE1/VALUE2/VALUE1-VALUE2.zip
...对于列表中包含两个值的每一行。我怎么能这样做?
答案 0 :(得分:1)
这是awk的一个很好的用例(更新以处理parantheses):
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您使用$1
$2
答案 1 :(得分:0)
我假设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
答案 2 :(得分:0)
输入数据文件的格式为(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"}'
答案 3 :(得分:0)
我会使用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,
... ,'
来修改原始文件。