如何在粘贴(shell)'中使用整数指定列数

时间:2017-10-26 02:55:46

标签: bash shell

输入

这是shell(BASH)中的变量1 2 3 4 ... (Over than 100,000 lines)

1 2 3 4 5 6 7 8 ... (until to 1000)
1001 1002 1003 1004 ... (until to 2000)
2001 2002 2003 2004 ... (until to 3000)

预期产出

paste

原始方法

我使用了lines=$(paste -d " " \ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ < $myinputs) 及其下面的分隔符列表,

# Maybe like this.
lines=$(paste --columns 1000 < $myinputs)

我的问题

是否有任何方法可以使代码更聪明?

PendingIntent.getActivity(context, (int) id, intentForB, PendingIntent.FLAG_UPDATE_CURRENT);

4 个答案:

答案 0 :(得分:2)

我刚刚使用10进行了测试,您可以将其更改为1000

使用xargs

$ xargs -n10 < infile

使用awk

$ awk 'ORS=NR%10?OFS:RS' infile

示例:

$ seq 100 | xargs -n10
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 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100


$ seq 100 | awk 'ORS=NR%10?OFS:RS'
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 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100

答案 1 :(得分:1)

请尝试以下操作并告诉我这是否对您有所帮助。

awk '{printf("%d%s",$0,$0%1000==0?RS:FS)}'  Input_file

答案 2 :(得分:1)

使用PR很容易

darby@Debian:~/Scrivania$ lines="$(pr -a --column 10 -t -S" " -J list.txt)"
darby@Debian:~/Scrivania$ echo "$lines"
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 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
darby@Debian:~/Scrivania$

在你的情况下

lines="$(echo "$myinputs" | pr -a --column 1000 -W 10000 -t -S" " -J)"

-a        print lines horizontally
--column  number of columns
-t        omit page headers and trailers
-S / -J   use space instead of tabs as line delimiter
-W        set page width

答案 3 :(得分:0)

你应该定义一个函数:

mycols() {
  local i max
  local -a cols=( )

  max=$1
  shift

  for ((i=0; i<max; i++ )); do
    cols+=( - )
  done

  paste "$@" "${cols[@]}"
}

...然后定义它,使用变得如此简单:

lines=$(mycols 100 -d ' ' <"$myinputs")