由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Linux版 - 请教一个打印列的问题
相关主题
cygwin里如何用2>&1enhanced grep
以下的script能成立吗?应该怎么实现?Windows XP下如何读取Ubuntu Linux里的文件?
问问应该学用那个shell?命令后面加“> ./mylogfile.$$ 2>&1”这一串是什么意思呢?
这个问题怎样用bash解决?C++ 诡异的编译问题。请教。
bash 中如何将命令的返回值存到变量中?求助请高手解答grep和ls的两个问题
诡异加用户问题如何用’sed‘ comment out 某一行。
有用ipython当shell用的吗?怎样创造一个 segv (转载)
不用安装的trash bin?有没有 vim plugin 查找函数被调用的地方?
相关话题的讨论汇总
话题: cols话题: ifs话题: ncol话题: awk话题: nf
进入Linux版参与讨论
1 (共1页)
R******d
发帖数: 1436
1
一个文件,比如:
a b
c d
e f g
我只想要那些都不是空的列,怎么用bash(包括awk/sed等)方便实现?
比如上面的情况,我就想输出
b
c
f
这一列。
多谢
b*******s
发帖数: 5216
2
这问题用编程语言解决很简单,不过不清楚shell怎么搞比较简单
也许下班了我试试

【在 R******d 的大作中提到】
: 一个文件,比如:
: a b
: c d
: e f g
: 我只想要那些都不是空的列,怎么用bash(包括awk/sed等)方便实现?
: 比如上面的情况,我就想输出
: b
: c
: f
: 这一列。

R******d
发帖数: 1436
3
有结果了吗,是不是必须得自己转置先?
b*******s
发帖数: 5216
4
比较惭愧,一直没开始写,上周开车去外地培训了

【在 R******d 的大作中提到】
: 有结果了吗,是不是必须得自己转置先?
b*******s
发帖数: 5216
5
今天写写看

【在 R******d 的大作中提到】
: 一个文件,比如:
: a b
: c d
: e f g
: 我只想要那些都不是空的列,怎么用bash(包括awk/sed等)方便实现?
: 比如上面的情况,我就想输出
: b
: c
: f
: 这一列。

n******7
发帖数: 12463
6
用awk算列数不划算,而且可能出错,如果每一行都有空白列的话,换成grep好点吧...
---
只会用shell基本功能,蛋疼的写了一下,觉得这样搞还不如用perl/python了...
#ncol=`awk '{print NF}' $1 | sort -r | head -1`
ncol=`head -1 $1 | grep -o $'\t' | wc -l`
ncol=$((ncol+1))
nrow=`wc -l $1| cut -f 1 -d ' ' `
good_cols=()
for ((i=1;i<=$ncol;i++))
do
non_blank=`cut -f $i $1 | grep -v '^$' |wc -l | cut -f 1 -d ' '`
if (( $(echo "$non_blank == $nrow" | bc -l) ))
then
good_cols=("${good_cols[@]}" $i)
fi
done
SAVE_IFS=$IFS
IFS=","
cols="${good_cols[*]}"
IFS=$SAVE_IFS
cut -f $cols $1
n******7
发帖数: 12463
7
发现脑残了,row number 不需要算
要是能利用上paste,也许可以不用再cut一遍
ncol=`head -1 $1 | grep -o $'t' | wc -l`
ncol=$((ncol+1))
good_cols=()
for ((i=1;i<=$ncol;i++))
do
if !(cut -f $i $1 | grep -m 1 '^$' > /dev/null )
then
good_cols=("${good_cols[@]}" $i)
fi
done
SAVE_IFS=$IFS
IFS=","
cols="${good_cols[*]}"
IFS=$SAVE_IFS
cut -f $cols $1
R******d
发帖数: 1436
8
我捣鼓了一下,awk基本可以实现,加上sed,输出效果就更好一点:
awk -F"\t" '{for(x=1;x<=NF;x++){if($x!=""){sum[x]++;data[NR,x]=$x}}}END{for(
i
=1;i<=NR;i++){for(j=1;j<=NF;j++){if(sum[j] printf("%s",data[i,j])}else{printf("%st",data[i,j])}};print ""}}' file|sed '
s/\t\{2,\}/\t/g'

【在 n******7 的大作中提到】
: 发现脑残了,row number 不需要算
: 要是能利用上paste,也许可以不用再cut一遍
: ncol=`head -1 $1 | grep -o $'t' | wc -l`
: ncol=$((ncol+1))
: good_cols=()
: for ((i=1;i<=$ncol;i++))
: do
: if !(cut -f $i $1 | grep -m 1 '^$' > /dev/null )
: then
: good_cols=("${good_cols[@]}" $i)

1 (共1页)
进入Linux版参与讨论
相关主题
有没有 vim plugin 查找函数被调用的地方?bash 中如何将命令的返回值存到变量中?求助
grep 的问题诡异加用户问题
怎么看网络电视啊?有用ipython当shell用的吗?
Grep 能作这个吗?不用安装的trash bin?
cygwin里如何用2>&1enhanced grep
以下的script能成立吗?应该怎么实现?Windows XP下如何读取Ubuntu Linux里的文件?
问问应该学用那个shell?命令后面加“> ./mylogfile.$$ 2>&1”这一串是什么意思呢?
这个问题怎样用bash解决?C++ 诡异的编译问题。请教。
相关话题的讨论汇总
话题: cols话题: ifs话题: ncol话题: awk话题: nf