我有2个文件:
1 "aaa"
2 "bbb"
4 "ddd"
3 "ccc"
和
1 "111"
3 "333"
4 "444"
如何使用bash合并到一个文件中,看起来完全像这样:
file1 "1 "aaa""
file2 "1 "111""
file1 "2 "bbb""
file2 ""
file1 "3 "ccc""
file2 "3 "333""
file1 "4 "ddd""
file2 "4 "444""
我正在考虑使用数组,但到目前为止,我设法只找到了解析整个行的数组。
我需要根据第一个数字进行分组。
此外,我希望能够在文件中添加一些文字。
到目前为止,我有这个脚本:
exec 6<"key-value-strings-utf8-preklad.txt"
while read -r line
do
read -r f2line <&6
echo "msgid \"${line}\""
echo "msgstr \"${f2line}\""
echo ""
done <"key-value-strings-utf8.txt"
exec 6<&-
问题是,它要求两个文件的排序完全相同。
你有线索吗?
我的目的是合并2个文件(一个用英文,一个用捷克语)并从中创建gettext po文件,这样我就可以进行翻译来帮助一些人(有点复杂的解释,但到目前为止似乎是最好的选择)对我来说。)
不幸的gettext工具无济于事,因为它们包裹行(即使使用--no-wrap,然后消息在/ n之后被包装),我需要将它们解包。
谢谢。
答案 0 :(得分:1)
使用awk将文件与文件名组合,然后进行适当的排序:
awk '{print ARGV[ARGIND]": "$0}' file1 file2 | sort -k 2n -k 1,1
这不会插入“缺失”匹配的空白,但你可以想出来。
答案 1 :(得分:0)
如果每个索引中的空格和顺序不重要,sort
应该完成任务。
cat file1 file2 | sort
...会给你:
1 "111"
1 "aaa"
2 "bbb"
3 "333"
3 "ccc"
4 "444"
4 "ddd"
如果您确实需要索引之间有空行,或者您需要在每个索引中保留顺序,
像
这样的东西x=1
while [ $x -lt 9999 ]; do
(cat file1 file2 | grep "^$x" && echo) | tee -a file3
x=$((x+1))
done
会给你:
1 "aaa"
1 "111"
2 "bbb"
3 "ccc"
3 "333"
4 "ddd"
4 "444"