shell - 以递增和递减顺序分布数据
问题描述
我有一个有 n 行的文件,我希望它的数据按照以下顺序分布在 7 个文件中
** 我的输入文件有 n 行,这只是一个例子。
输入文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
5
16
17
.
.
28
输出文件
1 2 3 4 5 6 7
14 13 12 11 10 9 8
15 16 17 18 19 20 21
28 27 26 25 24 23 22
所以如果我打开第一个文件它应该有行
1
14
15
28
同样,如果我打开第二个文件,它应该有行
2
13
16
27
其他文件也同样输出。
任何人都可以请帮助,使用下面的代码它正在做需要但不是按要求的顺序。
awk '{print > ("te1234"++c".txt");c=(NR%n)?c:0}' n=7 test6.txt
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
解决方案
编辑:由于 OP 改变了 Input_file 的样本完全不同,所以现在添加这个解决方案,再次只用显示的样本编写和测试。
带xargs
+单awk
:(推荐一个)
xargs -n7 < Input_file |
awk '
FNR%2!=0{
for(i=1;i<=NF;i++){
print $i >> (i".txt")
close(i".txt")
}
next
}
FNR%2==0{
for(i=NF;i>0;i--){
count++
print $i >> (count".txt")
close(i".txt")
}
count=""
}'
初步解决方案:
xargs -n7 < Input_file |
awk '
FNR%2==0{
for(i=NF;i>0;i--){
val=(val?val OFS:"")$i
}
$i=val
val=""
}
1' |
awk '
{
for(i=1;i<=NF;i++){
print $i >> (i".txt")
close(i".txt")
}
}'
上面也可以用single完成,awk
也会在几分钟内添加xargs
+ (single)解决方案。awk
您能否尝试在 GNU 中使用显示的示例进行跟踪、编写和测试awk
。
awk '{for(i=1;i<=NF;i++){print $i >> (i".txt");close(i".txt")}}' Input_file
推荐阅读
- matlab - 如何计算实际评论的行数?
- python - 接收 SettingWithCopyWarning。继续进行是否安全?
- javascript - Watson Speech to Text - 无法构造“WebSocket”:URL 包含片段标识符
- sap - 如何找到与 SAP FRONTEND 操作对应的正确 ABAP 函数
- mysql - 找到他们参加的每节课平均 > 5 的学生
- python - 从数据框中删除所有标点符号,某些字符除外
- swift - danielgindi/Charts - iOS - 在条形图上的特定条形上方设置标签
- websocket - 是否存在具有 Websocket Secure 支持的 F# Web 框架?(WSS) SSL
- jpql - jpql:从毫秒按月分组
- python - 带有张量流后端的Keras---MemoryError