每个人。我有一个像这样的文本文件:
1
question1
answer1
2
question2
answer2
3
question3
answer3
<etc>
我已经使用awk
阅读(但未成功尝试)许多不同的方式。我不是程序员,所以awk
很难理解。
awk
中有很多专家,所以我希望您能向我展示执行此操作的正确命令。
谢谢您的帮助!
我想消除编号的行(第1,第4,第7等),然后在问题和答案之间加上逗号,以便生成的文本文件如下所示:
question1, answer1
question2, answer2
question3, answer3
<etc>
答案 0 :(得分:3)
igen::Quaterniond eigen_quat;
tf::Quaternion tf_quat;
// Call the function
tf::quaternionEigenToTF (eigen_quat, tf_quat);
答案 1 :(得分:2)
使用GNU sed。删除从第一行(1~3d
开始的每三行,将输入的下一行追加到sed的模式空间(N
)中,并替换sed的模式空间(s/\n/, /
中现在包含的换行符)。
sed '1~3d; N; s/\n/, /' file
输出:
question1, answer1 question2, answer2 question3, answer3
答案 2 :(得分:1)
这可能对您有用(GNU sed):
sed -n 'n;N;s/\n/, /p' file
默认情况下,sed将打印其处理的每一行,但是您可以使用-n
选项将其关闭,现在sed仅在我们希望的时候打印。
n
命令通常会打印当前行并将其替换为下一行,但是由于我们要求它仅按需打印,因此实际上会丢失当前行。
N
命令将下一行追加到当前行。 sed通常在处理一行之前先去除所有换行符,它会先在当前行后面添加一个换行符\n
,然后再添加下一行。
s/\n/, /p
命令将此换行符替换为,
,后跟一个空格。如果替换成功,替换命令末尾的p
标志将打印当前行中的所有内容。当我们将当前行构造为在其中包含换行符(N
)时,我们知道这将始终发生。
总而言之,命令:删除第一行,用换行符连接第二和第三行,然后用逗号后跟空格替换该换行符并打印结果。重复。
一些替代方法:
sed 'N;s/.*\n//;N;s/\n/, /' file
sed 'N;N;s/.*\n\(.*\)\n/\1, /' file
sed -En 'n;N;G;s/(.)(.*)\1$/, \2/' file
最后一个解决方案类似于第一个解决方案,但是从不直接引用换行符。
答案 3 :(得分:0)
这似乎可行:
awk '{
if ($0 ~ /^[0-9]+$/) {
/* eliminates lines of all numbers */
} else if (x == "") {
/* save until next line is available */
x = $1;
} else {
/* print both */
print x "," $1;
/* reset flag */
x = "";
}
}'
这不是最优雅的awk,因为它比它设计的模式->操作更具程序性。...