我有以下格式的数据
//a method to make simon flash based on the arraylist
public void flashArry(){
for(int i=0;i<blist.size();i++){
int toFlash = blist.get(i);
setFlashed(toFlash);
repaint();
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(Simon.class.getName()).log(Level.SEVERE, null, ex);
}
setFlashed(F_DEFAULT);
repaint();
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(Simon.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
我正在尝试以下面的格式获取数据
select
abc string
adef double
opr timestamp
from Test;
select
dfg string
asd double
wer timestamp
from Test1;
我尝试使用awk获取不以select或select
abc,
adef,
opr
from Test;
select
dfg,
asd,
wer
from Test1;
开头的行的第二个字段。但不知道如何用逗号替换。另外,如何避免来自
此致
答案 0 :(得分:1)
由于它只是一堆打印语句并打开和关闭标志,因此没有太多可以解释的内容。这并不是说它很容易理解,也许其他人会有更具表现力的解决方案。
为了避免from
之前的行中的逗号,因为您不知道何时停止使用逗号直到到达块的最后一行,所以更容易添加逗号处理当前行时到上一行(适当时)。
添加您不需要实际&#34;替换&#34;第二个带逗号的字段,你可以放一个文字逗号并完全忽略第二个字段。
$ cat a.awk
/^ *from/ { printf "\n%s\n\n", $0; f1 = f2 = 0; }
f2 { printf ",\n%s", $1 }
f1 { printf "%s", $1; f1 = 0; f2 = 1;}
/^ *select/ {print; f1 = 1}
$ awk -f a.awk f
select
abc,
adef,
opr
from Test;
select
dfg,
asd,
wer
from Test1;
答案 1 :(得分:1)
$ awk '{n=(NR%6)} n~/[234]/{$0=$1(n<4?",":"")} 1' file
select
abc,
adef,
opr
from Test;
select
dfg,
asd,
wer
from Test1;
或者如果您愿意:
$ awk -v RS= '{printf "%s\n%s,\n%s,\n%s\n%s %s\n\n", $1, $2, $4, $6, $8, $9}' file
select
abc,
adef,
opr
from Test;
select
dfg,
asd,
wer
from Test1;
答案 2 :(得分:1)
这适用于select语句中的任意数量的列
$ awk 'BEGIN{RS=""; FS=OFS="\n"; ORS=FS FS}
{for(i=2;i<NF;i++) gsub(/ .*/,(i==NF-1)?"":",",$i)}1' file
select
abc,
adef,
opr
from Test;
select
dfg,
asd,
wer
from Test1;
文件末尾会有一个额外的换行符可以通过管道移除到sed '$d'
答案 3 :(得分:1)
Awk
解决方案:
awk 'f && r{
if (/from/){ sep = ORS $0; f = 0 }
printf "%s%s\n", r, sep
}
$1 == "select"{ f = 1; sep = ","; print; next }
{ r = $1; if (r == "") print }' file
输出:
select
abc,
adef,
opr
from Test;
select
dfg,
asd,
wer
from Test1;